// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package base

import (
	"strings"
)

// Adapter
// is a type name for logger writer.
type Adapter string

// Adapter enum.

const (
	// AdapterElasticsearch
	// publish log messages to elasticsearch.
	AdapterElasticsearch Adapter = "elastic"

	// AdapterFile
	// write log messages to local files.
	AdapterFile Adapter = "file"

	// AdapterKafka
	// publish log messages to kafka.
	AdapterKafka Adapter = "kafka"

	// AdapterTerm
	// send log messages to terminal.
	AdapterTerm Adapter = "term"

	// DefaultAdapter
	// use AdapterTerm as default if configuration not set or invalid.
	defaultAdapter = AdapterTerm
)

// Generator
// generates a valid adapter.
func (o Adapter) Generator() Adapter {
	a := Adapter(strings.ToLower(strings.TrimSpace(o.String())))
	switch a {
	case AdapterElasticsearch, AdapterFile, AdapterKafka, AdapterTerm:
		return a
	default:
		return defaultAdapter
	}
}

// String
// returns the adapter name.
func (o Adapter) String() string {
	return string(o)
}
